// 导入 express
const express = require('express')
// 导入 cors
const cors = require('cors')
// 导入 express-jwt
const { expressjwt: jwt } = require('express-jwt')
// 导入 config.js
const config = require('./config.js')
// 导入 admin 路由
const admin = require('./router/admin.js')
// 导入 info 路由模块
const info = require('./router/adminInfo.js')
// 导入 用户管理 路由模块
const manageUsers = require('./router/manage_users.js')

// 导入分类管理模块
const classmk = require('./router/class.js')

// 导入 招领 路由模块
const claim = require('./router/claim.js')

// 导入 失物 路由模块
const lost = require('./router/lost.js')

// 导入 用户注册登录 路由模块
const regUser = require('./router/user.js')

// 导入用户信息 路由模块
const userInfo = require('./router/userinfo')

// 导入分页功能 路由模块
const page = require('./router/page.js')

// 创建app实例
const app = express()

// 配置跨域
app.use(cors())

// 托管静态资源
app.use('/upload/', express.static('./upload/'))

// 解析 application/x-www-form-urlencoded 格式的表单数据
app.use(express.urlencoded({ extended: false }))
app.use(express.json())


// 全局配置中间件
app.use((req, res, next) => {
  res.ss = (msg, state = 400) => {
    res.send({
      state,
      msg: msg instanceof Error ? msg.message : msg
    })
  }
  next()
})

// 配置解析 token 并排除/api开头的接口
app.use(jwt({ secret: config.jwtSecretKey, algorithms: ["HS256"] }).unless({ path: /\/api\// }))

// 注册 admin 路由
app.use('/api', admin)

// 注册 info 路由
app.use('/my', info)

// 注册管理用户路由模块
app.use('/my', manageUsers)

// 注册分类管理模块
app.use(classmk)

// 注册招领路由模块
app.use(claim)

// 注册失物模块
app.use(lost)

// 用户注册登录
app.use('/api', regUser)

// 用户信息模块
app.use(userInfo)

// 分页功能
app.use(page)

// 错误全局中间件
app.use((err, req, res, next) => {
  // 捕获身份认证失败的错误
  if (err.name === 'UnauthorizedError') return res.ss('身份认证失败！')
})

// 启动服务器，监听端口 8000
app.listen(8000, () => {
  console.log('服务器启动成功：http://127.0.0.1:8000')
})
